7F0C9A9C	compression0 generate final image
	accepts: A0=p->final,A1=width,A2=height,A3=nibble3(image type)
ADDIU	SP,SP,FFC8
SW	S5,0028 (SP)
ADDIU	S5,A0,000F
ADDIU	AT,R0,FFF0
AND	T6,S5,AT	;T6=p->final to nearest 0x10
SW	S3,0020 (SP)
ADDIU	AT,R0,FFF8
ADDIU	V0,A0,0007
AND	S3,V0,AT	;S3=width to nearest 0x8
SW	S7,0030 (SP)
SW	S6,002C (SP)
SW	S2,001C (SP)
SLTIU	AT,A3,0009	;TRUE if image type<9
OR	S2,A1,R0	;S2=width
OR	S7,A2,R0	;S7=height
SW	RA,0034 (SP)
SW	S4,0024 (SP)
SW	S1,0018 (SP)
SW	S0,0014 (SP)
OR	S5,T6,R0	;S5=p->final to nearest 0x10
BEQ	AT,R0,7F0C9D74	;fail on stupid types
OR	S6,S3,R0	;S6=width to nearest 0x8
SLL	T8,A3,0x2	;T8=imgtype*4 (to offset)
LUI	AT,8006
ADDU	AT,AT,T8
LW	T8,BDA0 (AT)	;T8=8005BDA0+offset: 
JR	T8
NOP

7F0C9B0C	type 0	32bit color
BLEZ	S7,7F0C9B68	;branch if height is stupid
OR	S4,R0,R0	;S4=0	linenum
ADDIU	S3,S2,0003
ANDI	T9,S3,0FFC	;T9=WIDth
SLL	S3,T9,0x2	;S3=WIDth*4
//7F0C9B20:
BLEZ	S2,7F0C9B5C	;branch if width is dumb
OR	S0,R0,R0	;S0=0	count
OR	S1,S5,R0	;S1=S5: p->final to nearest 0x10
//7F0C9B2C:	write 32bit values
JAL	7F0CBF2C	;grab next 0x10 bits	red+green
ADDIU	A0,R0,0010
SLL	T1,V0,0x10	;T1=data*0x10000
SW	T1,0000 (S1)	;save green to final
JAL	7F0CBF2C	;grab next 0x10 bits	blue+alpha
ADDIU	A0,R0,0010
LW	T2,0000 (S1)	;save red+green
ADDIU	S0,S0,0001	;S0++	count++
ADDIU	S1,S1,0004	;p->final+=4
OR	T3,T2,V0	;T3=red+green + blue+alpha
BNE	S0,S2,7F0C9B2C	;loop for row
SW	T3,FFFC (S1)
//7F0C9B5C:	loop for each line
ADDIU	S4,S4,0001	;linenum++
BNE	S4,S7,7F0C9B20
ADDU	S5,S5,S3	;S5=
//7F0C9B68:	return final size
ADDIU	T4,S2,0003
ANDI	T5,T4,0FFC
MULTU	T5,S7
MFLO	V0
SLL	T6,V0,0x2
BEQ	R0,R0,7F0C9D78
OR	V0,T6,R0

7F0C9B84	type 2
BLEZ	S7,7F0C9BD0
OR	S4,R0,R0
ADDIU	S3,S2,0003
ANDI	T7,S3,0FFC
SLL	S3,T7,0x2
BLEZ	S2,7F0C9BC4
OR	S0,R0,R0
OR	S1,S5,R0
JAL	7F0CBF2C
ADDIU	A0,R0,0018
SLL	T9,V0,0x8
ADDIU	S0,S0,0001
ORI	T0,T9,00FF
ADDIU	S1,S1,0004
BNE	S0,S2,7F0C9BA4
SW	T0,FFFC (S1)
ADDIU	S4,S4,0001
BNE	S4,S7,7F0C9B98
ADDU	S5,S5,S3
ADDIU	T1,S2,0003
ANDI	T2,T1,0FFC
MULTU	T2,S7
MFLO	V0
SLL	T3,V0,0x2
BEQ	R0,R0,7F0C9D78
OR	V0,T3,R0

7F0C9BEC	types 1 & 4	16bit color & 16bit IA
BLEZ	S7,7F0C9C30
OR	S4,R0,R0
ADDIU	S3,S2,0003
ANDI	T4,S3,0FFC
SLL	S3,T4,0x1
BLEZ	S2,7F0C9C24
OR	S0,R0,R0
OR	S1,S6,R0
JAL	7F0CBF2C
ADDIU	A0,R0,0010
ADDIU	S0,S0,0001
ADDIU	S1,S1,0002
BNE	S0,S2,7F0C9C0C
SH	V0,FFFE (S1)
ADDIU	S4,S4,0001
BNE	S4,S7,7F0C9C00
ADDU	S6,S6,S3
ADDIU	T6,S2,0003
ANDI	T7,T6,0FFC
MULTU	T7,S7
MFLO	V0
SLL	T8,V0,0x1
BEQ	R0,R0,7F0C9D78
OR	V0,T8,R0

7F0C9C4C	type 3	15bit color
BLEZ	S7,7F0C9C98
OR	S4,R0,R0
ADDIU	S3,S2,0003
ANDI	T9,S3,0FFC
SLL	S3,T9,0x1
BLEZ	S2,7F0C9C8C
OR	S0,R0,R0
OR	S1,S6,R0
JAL	7F0CBF2C
ADDIU	A0,R0,000F
SLL	T1,V0,0x1
ADDIU	S0,S0,0001
ORI	T2,T1,0001
ADDIU	S1,S1,0002
BNE	S0,S2,7F0C9C6C
SH	T2,FFFE (S1)
ADDIU	S4,S4,0001
BNE	S4,S7,7F0C9C60
ADDU	S6,S6,S3
ADDIU	T3,S2,0003
ANDI	T4,T3,0FFC
MULTU	T4,S7
MFLO	V0
SLL	T5,V0,0x1
BEQ	R0,R0,7F0C9D78
OR	V0,T5,R0

7F0C9CB4	types 5 & 7	8bit IA and 8bit I
BLEZ	S7,7F0C9CF8
OR	S4,R0,R0
ADDIU	S5,S2,0007
ANDI	T6,S5,0FF8
OR	S5,T6,R0
BLEZ	S2,7F0C9CEC
OR	S0,R0,R0
OR	S1,S3,R0
JAL	7F0CBF2C
ADDIU	A0,R0,0008
ADDIU	S0,S0,0001
ADDIU	S1,S1,0001
BNE	S0,S2,7F0C9CD4
SB	V0,FFFF (S1)
ADDIU	S4,S4,0001
BNE	S4,S7,7F0C9CC8
ADDU	S3,S3,S5
ADDIU	T7,S2,0007
ANDI	T8,T7,0FF8
MULTU	T8,S7
MFLO	V0
BEQ	R0,R0,7F0C9D7C
LW	RA,0034 (SP)

7F0C9D10	types 6 & 8	4bit IA and 4bit I
BLEZ	S7,7F0C9D58
OR	S4,R0,R0
ADDIU	S1,S2,000F
ANDI	T9,S1,0FF0
SRA	S1,T9,0x1
BLEZ	S2,7F0C9D4C
OR	S0,R0,R0
JAL	7F0CBF2C
ADDIU	A0,R0,0008
SRA	T1,S0,0x1
ADDIU	S0,S0,0002
SLT	AT,S0,S2
ADDU	T2,S3,T1
BNEZ	AT,7F0C9D2C
SB	V0,0000 (T2)
ADDIU	S4,S4,0001
BNE	S4,S7,7F0C9D24
ADDU	S3,S3,S1
ADDIU	T3,S2,000F
ANDI	T4,T3,0FF0
SRA	T5,T4,0x1
MULTU	T5,S7
MFLO	V0
BEQ	R0,R0,7F0C9D7C
LW	RA,0034 (SP)

//7F0C9D74:	fail on stupid types
OR	V0,R0,R0
LW	RA,0034 (SP)
LW	S0,0014 (SP)
//7F0C9D7C:	quit
LW	S1,0018 (SP)
LW	S2,001C (SP)
LW	S3,0020 (SP)
LW	S4,0024 (SP)
LW	S5,0028 (SP)
LW	S6,002C (SP)
LW	S7,0030 (SP)
JR	RA
ADDIU	SP,SP,0038
